[iOS 10] UIPasteboardに新しく追加されたメソッドについて
1 はじめに
macOS Sierraの新機能であるUniversal Clipboardは、iOSのデバイスでコピーした「テキスト」や「画像」が、Macのクリップボードで共有できるというものですが、WWDC16のセッション 「What's New in Cocoa Touch」の中では、これに関連してUIPasteboardの新しいメソッドについて触れられていました。
紹介されていたUIPasteboardの新機能は、次の2つです。
- クリップボードの内容確認
- クリップボードの有効期範囲と期限
今回は、この新しいメソッドについて纏めてみたいと思います。
2 クリップボードの内容確認
例えば、 hasColorsでtrueが返った場合、クリップボードに色に関する情報が含まれていますので、開発者は、これを利用して、カラーピッカーのデフォルト色を設定するような事が可能です。
クリップボードにあるコンテンツを確認するメソッドは、次の4種類です。
var hasColors: Bool { get } var hasImages: Bool { get } var hasStrings: Bool { get } var hasURLs: Bool { get }
そして、各メソッドを使用すると、次のようになります。
let pasteboard = UIPasteboard.general pasteboard.string = "TEST" pasteboard.url = URL(string: "http://www.sapporoworks.ne.jp") //pasteboard.image = UIImage(named: "sample.png") // imageをセットするとhasImagesのみがtrueを返す //pasteboard.color = UIColor.blue //colorをセットするとhasColorのみがtrueを返す if pasteboard.hasStrings { print("has Strings!") } if pasteboard.hasURLs { print("has URLs!") } if pasteboard.hasImages { print("has images!") } if pasteboard.hasColors { print("colors!") }
上記コードで確認していて分かったのですが、imageやcolorにデータをセットすると、既存のstringやurlが消えてしまいます。 また、UIImage()のように、データの無いものをセットしてもhasImagesはfalseとなります。
3 クリップボードの有効範囲と期間
Universal Clipboardが導入されたUIPasteboardでは、セキュリティ上のリスクを下げるため、次の2つの機能が追加されています。
- 有効範囲をローカルのみに制限する
- 有効期限を設定する
上記の新機能を使用するためには、新しく追加されたsetItems:メソッドを使用します。
func setItems(_ items: [[String : Any]], options: [UIPasteboardOption : Any] = [:])
ここでパラメータに使用されるUIPasteboardOptionも、iOS 10 以降で追加されたものですが、ここに、有効範囲や期限を設定できます。
static let localOnly: UIPasteboardOption //Bool static let expirationDate: UIPasteboardOption // NSData
(1) ローカルのみ
有効範囲をローカルのみに制限する例は、次のようになるでしょう。 (すいません、macOS Sierraが、まだ手元に無く確認出来ていません)
let pasteboard = UIPasteboard.general pasteboard.setItems([["key": "value"]], options: [UIPasteboardOption.localOnly : true])
(2) 有効期限
有効期限を制限する例は、次のようになるでしょう。
let pasteboard = UIPasteboard.general let expirationDateOfTomorrow = Date().addingTimeInterval(60 * 60 * 24) //24時間有効 pasteboard.setItems([["key": "value"]], options: [UIPasteboardOption.expirationDate: expirationDateOfTomorrow])
4 最後に
今回は、Universal Clipboardに関連して拡張されたUIPasteboardについて纏めてみました。 macOS Sierraがインストールでき次第、更に動作確認を進めたいと思います。
5 参考リンク
API Reference UIPasteboard
API Reference setItems(_:options:)
API Reference UIPasteboardOption